1. Technical Field
The invention is related to error correction systems and in particular to shift-error correction systems for channel-encoded data.
2. Background Art
Shift-correction codes (described in the above-referenced commonly assigned U.S. patent application) based on ternary block codes may be used to protect run-length-limited (RLL) binary data (channel data) against certain types of errors. During the encoding operation, the shift-error correction encoder will (i) represent a block of input (information) d,k-constrained channel data as a sequence of ternary symbols (or "trits"), (ii) calculate a (usually much shorter) sequence of parity trits which uniquely correspond to the information trit sequence, (iii) map (code) the parity trit sequence to a d,k-constrained binary sequence (i.e., transform the parity checks to channel data) that is appended to the original block of information channel data to form a channel data representation of a shift-correction codeword, and (iv) transmit such encoded data. One useful aspect of shift-correction coding of channel data (relative to coding on user data prior to modulating it to channel data) is that the rate of the channel data representation of a shift-correction code is somewhat higher than the rate of the ternary code on which the shift-correction code is based. This is due to the fact that, on average, the number of information channel bits represented by each information trit is larger than the number of channel bits needed to represent a parity trit. This illustrated by the following example:
In a maxentropic 2,7-constrained binary code there are, on average, 4.53 channel bits in each "run" (a run is comprised of a channel data "one" together with the number of contiguous channel data "zeros" that immediately follow it), while in a widely used (practical) 2,7 code there are an average of 4.42 channel bits per run. Since each shift-correction code information trit represents one information channel run, a codeword of a shift-correction code that is based on a (N,K) ternary block error correcting code will have an average of 4.42K channel bits in its information part (when the practical 2,7 modulation code is used). On the other hand, since each parity trit has only one of the three possible values, it is represented by one of the three shortest possible channel runs (which have lengths 3, 4, or 5 channel bits in the 2,7 modulation code of this example). Since each of the three possible parity trit values occur with equal probability, the average length of a parity channel run is four channel bits. Therefore, the rate of the channel data representation of the shift-correction codeword (based on the (N,K) ternary code) is EQU R.sub.scc =4.42K/(4.42K+4(N-K)) (1)
while the rate of the base code is EQU R.sub.B =K/N. (2)
The shift-correction code thus enjoys a rate advantage of EQU .DELTA.R=R.sub.scc /RB=4.42/(4+0.42R.sub.B)&gt;1 (3)
so that, in our example, rate increases exceeding 5% are possible, depending on R.sub.B.
The rate increase .DELTA.R can be enhanced (made larger) if the overall number of channel bits needed to represent the shift-correction code's parity trits can be reduced further. One method of accomplishing this is to reduce the number of parity channel data runs that are required, i.e., to map (code) more than one parity trit per channel run. Doing this, however, is complicated by the fact that error multiplication must be avoided when received channel data is decoded back to parity trits, i.e., our mapping must be such that if any received channel data sequence suffers t shift-errors (a shift-error changes the decimal value of a run by .+-.1) the sequence of trits obtained via decoding of the erroneous channel data will contain at most t incorrect trits. A trit to d,k-constrained binary code that obeys this last condition is said to obey the "shift-error condition". We note that the trit to d,k-constrained binary mapping used in the parent application obeys the shift-error condition, but it maps each parity trit to a single channel run. If the shift-error condition is not obeyed, a channel data shift-error will cause more than one shift-correction code symbol (i.e., trit) to be erroneous and the shift-correction code's performance (i.e., its shift-error correcting capability) will be seriously degraded.